﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ENProyectoSIETE;
using CADProyectoSIETE.Properties;
using System.Configuration;
using System.Data;
using System.Data.Sql;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;

namespace CADProyectoSIETE
{
    public class EnemigoCAD
    {
        private string conexion;

        public string insertarEnemigo(ENEnemigo enemigo)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);
            
            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from Enemigo ", conex);

                da.Fill(bdvirtual, "enemigo");
                //Obtenemos la tabla enemigos
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["enemigo"];
                //Creamos la nueva fila a insertar
                DataRow nuevafila = tabla.NewRow();
                nuevafila[1] = enemigo.getNombre();
                nuevafila[2] = enemigo.getAtaque();
                nuevafila[3] = enemigo.getVida();
                nuevafila[4] = enemigo.getDefensa();
                nuevafila[5] = enemigo.getPuntos();
                nuevafila[6] = enemigo.getImagen();

                tabla.Rows.Add(nuevafila);

                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "enemigo");

                /*conex.Open();

                SqlCommand comando = new SqlCommand("insert into Enemigo(nombreEnemigo, ataqueEnemigo, vidaEnemigo, defensaEnemigo, puntosEnemigo, imagenEnemigo) values ('" + enemigo.getNombre() + "','" + enemigo.getAtaque() + "','" + enemigo.getVida() + "','" + enemigo.getDefensa() + "','" + enemigo.getPuntos() + "','" + enemigo.getImagen() + "');", conex);

                comando.ExecuteNonQuery();*/
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
            finally
            {
                conex.Close();
            }

            conex.Close();
            return "OK";
        }

        public string borrarEnemigo(ENEnemigo enemigo)
        {
            int i = 0;
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from Enemigo ", conex);

                da.Fill(bdvirtual, "enemigo");
                //Obtenemos la tabla enemigos
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["enemigo"];

                foreach (DataRow registro in tabla.Rows)
                {
                    if ((int)registro["idEnemigo"] == enemigo.getId())
                    {
                        tabla.Rows[i].Delete();
                    }
                    i++;
                }

                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "enemigo");
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
            finally
            {
                conex.Close();
            }

            conex.Close();
            return "OK";
        }

        //Obtiene todos los registros de la tabla EnemigoLocalizacion
        public DataSet obtenerEnemigosLocalizacion()
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from enemigolocalizacion", conex);

                da.Fill(bdvirtual, "enemigolocalizacion");
                return bdvirtual;
            }
            catch(Exception ex)
            {
                DataSet bdvacia = new DataSet();
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        public ENEnemigo obtenerEnemigo(int index)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from enemigo where idEnemigo=" + index.ToString(), conex);

                da.Fill(bdvirtual, "enemigo");
                ENEnemigo enemigo = new ENEnemigo();

                foreach (DataRow registro in bdvirtual.Tables["enemigo"].Rows)
                {
                    enemigo.setId(int.Parse(registro[0].ToString()));
                    enemigo.setNombre(registro[1].ToString());
                    enemigo.setAtaque(int.Parse(registro[2].ToString()));
                    enemigo.setVida(int.Parse(registro[3].ToString()));
                    enemigo.setDefensa(int.Parse(registro[4].ToString()));
                    enemigo.setPuntos(int.Parse(registro[5].ToString()));
                    enemigo.setImagen(registro[6].ToString());
                }

                return enemigo;
            }
            catch
            {
                ENEnemigo enemigoerror = new ENEnemigo();
                return enemigoerror;
            }
            finally
            {
                conex.Close();
            }
        }

        public DataSet obtenerEnemigos()
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from enemigo", conex);

                da.Fill(bdvirtual, "enemigo");
                return bdvirtual;
            }
            catch (Exception ex)
            {
                DataSet bdvacia = new DataSet();
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        public DataTable obtenerEnemigoNombre(string nombre,int vidadesde=-1,int vidahasta=-1)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da=null;
                if(vidadesde==-1 && vidahasta==-1){
                    da= new SqlDataAdapter("select * from enemigo where nombreEnemigo LIKE '%" + nombre + "%'", conex);
                }
                else if(vidadesde==-1){
                    da = new SqlDataAdapter("select * from enemigo where vidaEnemigo<="+vidahasta+" AND nombreEnemigo LIKE '%" + nombre + "%'", conex);
                }
                else if (vidahasta == -1)
                {
                    da = new SqlDataAdapter("select * from enemigo where vidaEnemigo>" + vidadesde + " AND nombreEnemigo LIKE '%" + nombre + "%'", conex);
                }
                else
                {
                    da = new SqlDataAdapter("select * from enemigo where vidaEnemigo<="+vidahasta+" AND vidaEnemigo>" + vidadesde + " AND nombreEnemigo LIKE '%" + nombre + "%'", conex);
                }

                da.Fill(bdvirtual, "enemigo");
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["enemigo"];

                //ENEnemigo enemigo = new ENEnemigo();
                //ArrayList listaenemigos = new ArrayList();

                /*foreach (DataRow registro in bdvirtual.Tables["enemigo"].Rows)
                {
                    enemigo.setId(int.Parse(registro[0].ToString()));
                    enemigo.setNombre(registro[1].ToString());
                    enemigo.setAtaque(int.Parse(registro[2].ToString()));
                    enemigo.setVida(int.Parse(registro[3].ToString()));
                    enemigo.setDefensa(int.Parse(registro[4].ToString()));
                    enemigo.setPuntos(int.Parse(registro[5].ToString()));
                    enemigo.setImagen(registro[6].ToString());

                    listaenemigos.Add(enemigo);
                }*/

                return tabla;
            }
            catch
            {
                DataTable tablavacia = new DataTable();
                return tablavacia;
            }
            finally
            {
                conex.Close();
            }
        }

        public string editarEnemigo(ENEnemigo enemigo)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                int i = 0;
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from enemigo", conex);

                da.Fill(bdvirtual, "enemigo");
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["enemigo"];

                foreach (DataRow registro in tabla.Rows)
                {
                    if ((int)registro["idEnemigo"] == enemigo.getId())
                    {
                        tabla.Rows[i][0] = enemigo.getId();
                        tabla.Rows[i][1] = enemigo.getNombre();
                        tabla.Rows[i][2] = enemigo.getAtaque();
                        tabla.Rows[i][3] = enemigo.getVida();
                        tabla.Rows[i][4] = enemigo.getDefensa();
                        tabla.Rows[i][5] = enemigo.getPuntos();
                        tabla.Rows[i][6] = enemigo.getImagen();
                    }
                    i++;
                }

                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "enemigo");
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
            finally
            {
                conex.Close();
            }

            conex.Close();
            return "OK";
        }

        //Obtiene todos los enemigos asociados a una localizacion que se pasa por argumento
        public ArrayList obtenerEnemigoLocalizacion(int idLocalizacion)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);
    
            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select idEnemigo, porcentaje from enemigolocalizacion where idLocalizacion=" + idLocalizacion.ToString(), conex);

                da.Fill(bdvirtual, "enemigolocalizacion");

                ArrayList enemigos = new ArrayList();

                foreach (DataRow registro in bdvirtual.Tables["enemigolocalizacion"].Rows)
                {
                    ENEnemigosLocalizacion enemigo = new ENEnemigosLocalizacion();

                    enemigo.IDEnemigo = int.Parse(registro[0].ToString());
                    enemigo.Porcentaje = int.Parse(registro[1].ToString());
                    enemigo.Nombre = "";

                    enemigos.Add(enemigo);
                }

                
                foreach (ENEnemigosLocalizacion item in enemigos)
                {
                    SqlDataAdapter danombre = new SqlDataAdapter("select nombreEnemigo from enemigo where idEnemigo="+item.IDEnemigo, conex);
                    DataSet bdvirtualnombre = new DataSet();
                    danombre.Fill(bdvirtualnombre, "enemigo");

                    item.Nombre = bdvirtualnombre.Tables["enemigo"].Rows[0][0].ToString();

                    
                }

                return enemigos;
            }
            catch
            {
                ArrayList enemigoserror = new ArrayList();
                return enemigoserror;
            }
            finally
            {
                conex.Close();
            }
        }
    }
}
